package com.vanysoft.business.sys.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.vanysoft.business.sys.constant.RoleConstant;
import com.vanysoft.business.sys.entity.UserInfo;
import com.vanysoft.framework.config.database.BaseService;

import java.util.List;
import java.util.Map;

/**
 * 用户service
 *
 * @author qi_ma
 */
public interface UserInfoService extends BaseService<UserInfo> {
    /**
     * 登陆操作
     *
     * @param username 账号
     * @param password 密码
     * @return token
     */
    String doLogin(String username, String password);

    /**
     * 根据账号查询用户信息
     *
     * @param username 账号
     * @return UserInfo
     */
    UserInfo selectByUsername(String username);

    /**
     * 登出操作
     *
     * @param token token
     */
    void doLogout(String token);

    /**
     * 分页查询所有
     *
     * @param page 分页信息
     *             page.condition 查询条件
     *             page.condition.roleId 角色ID[默认角色ID见角色常量类]
     *             page.condition.searchKey 关键字查询（CHINESE_NAME,ENGLISH_NAME,USERNAME）
     * @return 用户集合
     * @see RoleConstant
     */
    Page<UserInfo> selectAll(Page<UserInfo> page);

    /**
     * 查询所有
     *
     * @param condition 查询条件
     *                  condition.roleId 角色ID[默认角色ID见角色常量类]
     *                  condition.searchKey 关键字查询（CHINESE_NAME,ENGLISH_NAME,USERNAME）
     * @return 用户集合
     * @see RoleConstant
     */
    List<UserInfo> selectAll(Map<String, Object> condition);

    /**
     * 根据角色ID数组查询所有用户
     *
     * @param roleIds 角色ID数组
     * @return 用户集合
     */
    List<UserInfo> selectByRoleIds(String[] roleIds);

    /**
     * 菜单收藏/取消收藏
     *
     * @param userId     用户ID
     * @param menuId     菜单ID
     * @param isFavorite 是否收藏
     * @return 是否成功
     */
    boolean saveFavorite(String userId, String menuId, Boolean isFavorite);
}
